/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.khk.lesson;

import com.sun.faces.facelets.tag.jsf.core.ConvertDateTimeHandler;
import java.io.Serializable;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author Yorre
 */
@ManagedBean
//@RequestScoped
@SessionScoped
public class ReisController implements Serializable {

    @Inject
    private userpagesController userpagesController;
    private Integer id;
    private Date vertrekDatum;
    private Date terugkeerDatum;
    private int maxPlaatsen;
    private BigDecimal prijsPerPersoon;
    private String beschrijving;
    private String reisNaam;
    private Vervoer vervoersID;
    private Bestemming bestemmingsID;

    public Integer getId() {
        return id;
    }

    public Date getVertrekDatum() {
        return vertrekDatum;
    }

    public Date getTerugkeerDatum() {
        return terugkeerDatum;
    }

    public int getMaxPlaatsen() {
        return maxPlaatsen;
    }

    public BigDecimal getPrijsPerPersoon() {
        return prijsPerPersoon;
    }

    public String getBeschrijving() {
        return beschrijving;
    }

    public String getReisNaam() {
        return reisNaam;
    }

    public Vervoer getVervoersID() {
        return vervoersID;
    }

    public Bestemming getBestemmingsID() {
        return bestemmingsID;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setVertrekDatum(Date vertrekDatum) {
        this.vertrekDatum = vertrekDatum;
    }

    public void setTerugkeerDatum(Date terugkeerDatum) {
        this.terugkeerDatum = terugkeerDatum;
    }

    public void setMaxPlaatsen(int maxPlaatsen) {
        this.maxPlaatsen = maxPlaatsen;
    }

    public void setPrijsPerPersoon(BigDecimal prijsPerPersoon) {
        this.prijsPerPersoon = prijsPerPersoon;
    }

    public void setBeschrijving(String beschrijving) {
        this.beschrijving = beschrijving;
    }

    public void setReisNaam(String reisNaam) {
        this.reisNaam = reisNaam;
    }

    public void setVervoersID(Vervoer vervoersID) {
        this.vervoersID = vervoersID;
    }

    public void setBestemmingsID(Bestemming bestemmingsID) {
        this.bestemmingsID = bestemmingsID;
    }

    /**
     * Creates a new instance of ReisControllerµ
     */
    public ReisController() {
    }

    public List<Reis> getReizen() {

        EntityManagerFactory emf = null;
        try {
            emf = Persistence.createEntityManagerFactory("Awesome_RD_TravelshopPU");
//let op: gebruik hier de juiste naam van de persistence unit 
//(zoek op in persistence.xml)

            EntityManager em2 = emf.createEntityManager();
            List<Reis> reizen = em2.createNamedQuery("Reis.findAll").getResultList();
            return reizen;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            emf.close();
        }
    }

    public Reis getReisById(Integer id) {

        EntityManagerFactory emf = null;
        try {
            emf = Persistence.createEntityManagerFactory("Awesome_RD_TravelshopPU");
//let op: gebruik hier de juiste naam van de persistence unit 
//(zoek op in persistence.xml)

            EntityManager em2 = emf.createEntityManager();
            Reis reizen = (Reis) em2.createNamedQuery("Reis.findById").setParameter("id", id).getSingleResult();
            return reizen;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            emf.close();
        }
    }

    public List<Reis> getReisByPeriode(Date terugkeerDatum, Date vertrekDatum) {
        EntityManagerFactory emf = null;
        try {
            emf = Persistence.createEntityManagerFactory("Awesome_RD_TravelshopPU");
            EntityManager em2 = emf.createEntityManager();
            //  List<Reis> reizen = em2.createQuery("SELECT r FROM Reis r WHERE r.terugkeerDatum <= " + terugkeerDatumFormat + " AND r.vertrekDatum >= " + vertrekDatumFormat).getResultList();
            List<Reis> reizenByPeriode = em2.createNamedQuery("Reis.findByPeriode")
                    .setParameter("terugkeerDatum", terugkeerDatum)
                    .setParameter("vertrekDatum", vertrekDatum)
                    .getResultList();
            return reizenByPeriode;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            emf.close();
        }
    }

    public String gaNaarReisPeriodePagina() {
        List<Reis> reizenByPeriode = this.getReisByPeriode(getTerugkeerDatum(), getVertrekDatum());
        userpagesController.setReizenByPeriode(reizenByPeriode);
        return "./SearchResults.xhtml";
    }
}
